#include <iostream>
using std::cout;
using std::endl;

int num = 100;

int func1(){
    return num;//执行return语句时会发生复制
}

//如果某个函数需要让其返回值是某个变量本身
//那么可以在函数返回类型中加上&
int & func2(){
    return num;//执行return语句时不会发生复制
}

#if 0
//不要返回局部变量的引用
//func3执行完后number会销毁
//此函数的返回值会是一个悬空引用
//
//需要确保引用绑定的本体生命周期比函数更长
int & func3()
{
	int number = 1;
    return number;
}
#endif

void test0(){
    cout << &num << endl;
    //func1函数的返回值是一个临时变量（num的副本）
    cout << func1() << endl;
    //func2函数的返回值是一个绑定到num的引用
    cout << func2() << endl;

    /* &func1(); */
    cout << &func2() << endl;
}


int & func4(){
    int * p = new int(10);
    return *p;
}

void test1(){
    /* cout << func4() << endl; */
    /* delete &func4(); */

    int & ref = func4();
    cout << ref << endl;
    delete &ref;
}



int main(void){
    test1();
    return 0;
}
